package biblio;

import java.util.GregorianCalendar;

/**
 * Classe de gestion du menu.
 * @author IUT, refactor� par E. Ceret
 * @version 2.0
 */
public class MenuBiblio {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private Bibliotheque _bibliotheque;

	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************
	public MenuBiblio(Bibliotheque bibliotheque) {
		_bibliotheque = bibliotheque;
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes publiques
	// ************************************************************************************************************

	/**
	 * Gestion du menu principal.
	 */
	public void menuPrincipal() {
		int choix;
		GregorianCalendar datejour = new GregorianCalendar();

		do {
			EntreesSorties.afficherMessage("");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      " + EntreesSorties.ecrireDate(datejour));
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      *           GESTION BIBLIOTHEQUE         *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      * 1- Operations sur les LECTEURS         *");
			EntreesSorties.afficherMessage("      * 2- Operations sur les OUVRAGES         *");
			EntreesSorties.afficherMessage("      * 3- Opérations sur les AUTEURS          *");
			EntreesSorties.afficherMessage("      * 4- Rechercher un Ouvrage               *");
			EntreesSorties.afficherMessage("      *                                        *");
			EntreesSorties.afficherMessage("      * 0- Quitter                             *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("");
			choix = EntreesSorties.lireEntier("      Votre Choix : ");

			switch (choix) {
				case 1: {
					this.menuLecteur();
					break;
				}
				case 2: {
					this.menuOuvrage();
					break;
				}
				
				case 3: {
					this.menuAuteur();
					break;
				}
				case 4: {
					this.menuRechOuvrage();
					break;
				}
				default: {
					break;
				}
			} // switch
			System.out.println();
		} while (choix != 0);
	} // Fin menuPrincipal


	/**
	 * Menu sur le lecteur
	 */
	public void menuLecteur() {
		int choix;
		do {
			EntreesSorties.afficherMessage("");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      *        Operations sur les LECTEURS     *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      * 1- Ajouter un lecteur                  *");
			EntreesSorties.afficherMessage("      * 2- Consulter un lecteur                *");
			EntreesSorties.afficherMessage("      *                                        *");
			EntreesSorties.afficherMessage("      * 0- Retour au menu principal            *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("");
			choix = EntreesSorties.lireEntier("      Votre Choix : ");

			switch (choix) {
				case 1: {
					// Instanciation du controleur
					CtrNouvLecteur controleur = new CtrNouvLecteur(_bibliotheque);
					// Cr�ation d'un nouveau lecteuur
					controleur.nouvLecteur();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null; // suppression du controleur
					break;
				}
				case 2: {
					// Instanciation du controleur
					CtrConsLecteur controleur = new CtrConsLecteur(_bibliotheque);
					// Cr�ation d'un nouveau lecteuur
					controleur.consLecteur();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null; // suppression du controleur
					break;
				}
				default: {
					break;
				}
			} // switch

		} while (choix != 0);
	} // Fin menuLecteur

	public void menuOuvrage() {
		int choix;
		
		// Boucle tant que l'utilisateur ne fait pas le choix 0
		do {
			EntreesSorties.afficherMessage("");
			EntreesSorties.afficherMessage("      *****************************************");
			EntreesSorties.afficherMessage("      *     Operations sur les OUVRAGES       *");
			EntreesSorties.afficherMessage("      *****************************************");
			EntreesSorties.afficherMessage("      * 1- Ajouter un ouvrage                 *");
			EntreesSorties.afficherMessage("      * 2- Ajouter un exemplaire              *");
			EntreesSorties.afficherMessage("      * 3- Rendre un exemplaire empruntable   *");
			EntreesSorties.afficherMessage("      * 4- Rendre un exemplaire consultable   *");
			EntreesSorties.afficherMessage("      * 5- Rendre un exemplaire non disponible*");
			EntreesSorties.afficherMessage("      * 6- Consulter un ouvrage               *");
			EntreesSorties.afficherMessage("      *                                       *");
			EntreesSorties.afficherMessage("      * 0- Retour au menu principal           *");
			EntreesSorties.afficherMessage("      *****************************************");
			EntreesSorties.afficherMessage("");
			choix = EntreesSorties.lireEntier("      Votre Choix : ");

			switch (choix) {
				case 1: {
					// Instanciation du controleur
					CtrNouvOuvrage controleur = new CtrNouvOuvrage(_bibliotheque);
					// Cr�ation d'un nouvel ouvrage
					controleur.nouvOuvrage();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
				case 2: {
					// Instanciation du controleur
					CtrNouvExemplaire controleur = new CtrNouvExemplaire(_bibliotheque);
					// Saisie d'un nouvel exemplaire
					controleur.nouvExemplaire();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
				
				case 3: {
					// Instanciation du controleur
					CtrRendreExEmpruntable controleur = new CtrRendreExEmpruntable(_bibliotheque);
					// Rendre un exemplaire empruntable
					controleur.rendreExEmpruntable();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
				
				case 4: {
					// Instanciation du controleur
					CtrRendreExConsultable controleur = new CtrRendreExConsultable(_bibliotheque);
					// Rendre un exemplaire consultable
					controleur.rendreExConsultable();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
				
				case 5: {
					// Instanciation du controleur
					CtrRendreExNonDispo controleur = new CtrRendreExNonDispo(_bibliotheque);
					// Rendre un exemplaire indisponible
					controleur.rendreExemplaireIndispo();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendrExNonDispo
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null; 
					break;
				}
	
				case 6: {
					// Instanciation du controleur
					CtrConsOuvrage controleur = new CtrConsOuvrage(_bibliotheque);
					// Consulter un ouvrage
					controleur.consulterOuvrage();
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrConsOuvrage
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
	
				default: {
					break;
				}
			} // switch

		} while (choix != 0);
	} // Fin menuOuvrage
	
	/**
	 * Menu sur le lecteur
	 */
	public void menuAuteur() {
		int choix;
		do {
			EntreesSorties.afficherMessage("");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      *        Operations sur les AUTEURS      *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("      * 1- Consulter un auteur                  *");
			EntreesSorties.afficherMessage("      *                                        *");
			EntreesSorties.afficherMessage("      * 0- Retour au menu principal            *");
			EntreesSorties.afficherMessage("      ******************************************");
			EntreesSorties.afficherMessage("");
			choix = EntreesSorties.lireEntier("      Votre Choix : ");

			switch (choix) {
			case 1: {
						// Instanciation du controleur
			CtrConsAuteur controleur = new CtrConsAuteur(_bibliotheque);
			// Consulter un ouvrage
					try{
					controleur.consulterAuteur();
					}
					
					catch(NullPointerException e){
						
							System.out.println("L'auteur n'existe pas : " + e +  "levée \n\n");
						
						}
			
			// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrConsOuvrage
			// puisqu'il n'y a plus de variable qui la r�f�rence
			controleur = null;
			break;
			}
			
			
			} // switch

			}while (choix != 0);
	}
		
		public void menuRechOuvrage() {
			int choix;
			do {
				EntreesSorties.afficherMessage("");
				EntreesSorties.afficherMessage("      ******************************************");
				EntreesSorties.afficherMessage("      *        Rechercher un Ouvrage      *");
				EntreesSorties.afficherMessage("      ******************************************");
				EntreesSorties.afficherMessage("      * 1- Rechercher par auteur               *");
				EntreesSorties.afficherMessage("      * 2- Rechercher par Mot Clé              *");
				EntreesSorties.afficherMessage("      *                                        *");
				EntreesSorties.afficherMessage("      * 0- Retour au menu principal            *");
				EntreesSorties.afficherMessage("      ******************************************");
				EntreesSorties.afficherMessage("");
				choix = EntreesSorties.lireEntier("      Votre Choix : ");

				switch (choix) {
				case 1: {
							// Instanciation du controleur
				CtrConsAuteur controleur = new CtrConsAuteur(_bibliotheque);
				// Consulter un ouvrage
					try{
					controleur.consulterAuteur();
					}
				
					catch(NullPointerException e){
						
							System.out.println("L'auteur n'existe pas : " + e +  "levée \n\n");
						
						}
				
				// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrConsOuvrage
				// puisqu'il n'y a plus de variable qui la r�f�rence
				controleur = null;
				break;
				}
				case 2: {
					// Instanciation du controleur
					CtrRechercherParMotCle controleur = new CtrRechercherParMotCle(_bibliotheque);
					// Saisie d'un nouvel exemplaire
							try{
							controleur.rechParMotCle();
							}
							catch(NullPointerException e){
								
								System.out.println("Le mot clé n'existe pas : " + e +  "levée \n\n");
							
							}
					// remise � null de la variable controleur, qui entraine la destruction de l'instance de CtrRendreExConsultable
					// puisqu'il n'y a plus de variable qui la r�f�rence
					controleur = null;
					break;
				}
				
				default: {
					break;
				}
				} // switch

				}while (choix != 0);
	}// Fin Classe MenuBiblio
}